/* 
 * File:   ArchivoPalabraAleatoria.h
 * Author: martin
 *
 * Created on September 18, 2012, 10:51 AM
 */

#ifndef ARCHIVOPALABRAALEATORIA_H
#define	ARCHIVOPALABRAALEATORIA_H

#include<fstream>
#include"PalabraAleatoria.h"

using std::ofstream;
using std::ifstream;

class ArchivoPalabraAleatoria {

    private:
        ofstream* salida;
        ifstream* entrada;
        char* pathArchivo;
        unsigned long cantidadRegistros,posicionArchivo;
        void cerrarEscritura();
        void cerrarLectura();
        void cerrar();

    public:
        /*abre el archivo para escritura o lectura respectivamente*/
        int abrirEscritura(char* direccionArchivo);
        int abrirLectura(char* direccionArchivo);

        /*guarda una cantidad cantidadRegistros guardados en palabrasAleatorias en el final
         de archivo. */
        int guardar(PalabraAleatoria* palabrasAleatorias,unsigned int cantReg);
        enum SALIDA_IO {BUFFER_NULO, EXITO, CANT_REG_NULO, ARCH_NO_ABIERTO,FALLA_ESCRITURA,FIN_ARCHIVO};

        /*carga una cantidad cantReg en el buffer. Retorna en cantReg la cantidad efectiva de 
         registros leidos*/
        int cargar(PalabraAleatoria* buffer,unsigned int &cantReg);
        
        //retorna tamanio del archivo abierto en bytes
        unsigned long getTamanioArchivo();
        unsigned long getCantidadRegistros();

        /*metodo para truncar el archivo abierto permaneciendo una cantidad de registros
         cantReg. deja abierto el archivo original en modo lectura en posicion inicial.*/
        int truncar(unsigned long cantReg);
        
        /*borra el archivo y lo deja escrito en estado vacio y abierto en modo escritura.
         Este comando solo funciona en linux*/
        int limpiar();

        ArchivoPalabraAleatoria();
        ~ArchivoPalabraAleatoria();

};//ArchivoPalabraAleatoria

#endif	/* ARCHIVOPALABRAALEATORIA_H */

